R Markdown y Quarto

Mariana Guerrero Osornio

Santiago Garcia Rios

Estadística General en R

Introducción

¿Qué es RMarkdownon?

Es una herramienta que permite hacer documentos dinámicos y reproducibles con R. Combina código, texto, datos y gráficas.

Se pueden realizar diferentes tareas:

  • Crear documentos en diferentes formatos: PDF, Word, HTML
  • Añadir y ejecutar código (bash, python, R, sql..)
  • Hacer presentaciones
  • Crear sitios webs
  • Hacer análisis y reportes estadísticos
  • Crear aplicaciones con shiny

Crear un archivo R Markdown

  • Abrir R > Archivo > Documento nuevo > R Markdown

Crear un archivo R Markdown

  • Se obtendrá el siguiente archivo:

Encabezado

Bloque de código

Texto

Edición del texto

  • Agregar encabezados:
 Sintaxis
      Resultado
#Título

Título

## Título 2

Título 2

### Título 3

Título 3

Edición del texto

  • Maneras de modificar el texto:
        Sintaxis
         Resultado
*italica*, **bold**, ***ambas***
italica, bold, ambas
superíndice^2^ / subíndice~2~
superíndice2/subíndice2
~~tachado~~
tachado
<span style="color:blue">Hola!</span>
Hola!
<span style="font-size: 12.0pt;">Hola!
</span>
Hola!

Generar listas

  • Se pueden combinar números, signos, letras y espacios
* lista1                         
    + uno                        
    + dos         
    
1. lista2                        
    i) sublista                  
         A.  sub-sublista        
  • lista1
    • uno
    • dos
  1. lista2
    1. sublista
      1. sub-sublista

Generar tablas

  • Las columnas se separan con un tabulador y los encabezados con guíones
  • Los dos puntos especifican la alineación de las palabras
| Izquierda | Derecha | Default | Centrado |
|----------:|:--------|---------|:--------:|
|   12      |  12     |    12   |    12    |
|    1      |    1    |     1   |     1    |
Izquierda Derecha Default Centrado
12 12 12 12
1 1 1 1

Bloques de código

Son bloques de código que se pueden ejecutar. Se utilizan diferentes argumentos para configurar el comportamiento:

  • include = FALSE, código y los resultados no aparecen en el archivo final
  • echo = FALSE, el código no aparece pero los resultados sí
  • message = FALSE, evita que los mensajes generados en el código aparezcan
  • warning = FALSE, evita que aparezcan las advertencias
  • fig.cap = “…”, añade títulos a los gráficos

¿Qué es Quarto ?

Quarto es un sistema que también permite crear documentos interactivos usando texto, código y visualizaciones. Toma lo mejor de RMarkdown y Jupyter Notebook, para integrarlo en una herramienta.

Diferencias - Quarto vs RMarkdown

  • rmarkdown necesita el paquete install.packages("rmarkdown"), mientras que Quarto viene con RStudio
  • Quarto es multilingüe: R, Python, Javascript y Julia
  • Quarto es compatible con Knitr, Jupyter y Observable
  • Quarto crea archivos tipo HTML, PDF, MS Word, ePub, etc. sin librerías externas.
  • Quarto incorpora más formatos de forma nativa (websites, libros, blogs) mientras que rmarkdown necesita paquetes externos
  • Algunos paquetes todavía solo se encuentran en rmarkdown como los Tutoriales interactivos con learnr; Ver lista completa de paquetes y equivalencias entre los 2

Diferencias - Formatos

R Markdown (output)

title: "Documento html"
output:
  html_document:
    toc: true
    number_sections: true
    css: styles.css

Quarto (format)

title: "Documento html"
format:
  html:
    toc: true
    number-sections: true
    css: styles.css

Diferencias - Opciones de los Bloques de código

- en Rmarkdown se escriben las opciones en el la primera línea. En quarto se pueden escribir como comentarios:

```{r, output: false}
library(ggplot2)

ggplot(airquality, aes(Temp, Ozone)) + 
  geom_point() + 
  geom_smooth(method = "loess", se = FALSE)
```
```{r}
#| output: false
#| code-overflow: wrap
#| code-line-numbers: "2|3|4|5"
#| fig-cap: "Air Quality"

library(ggplot2)
ggplot(airquality, aes(Temp, Ozone)) + 
  geom_point() + 
  geom_smooth(method = "loess", se = FALSE)
```

Análisis de datos

Ejecutar código

library(ggplot2)
ggplot(mtcars, aes(hp, mpg, color = am)) +
  geom_point() +
  geom_smooth(formula = y ~ x, method = "loess")

Figuras + Datos

Se pueden pasar dataframes a funciones como kable o flextable para producir una table en markdown

knitr::kable(mtcars, caption = "Un título")
Un título
mpg cyl disp hp drat wt qsec vs am gear carb
Mazda RX4 21.0 6 160.0 110 3.90 2.620 16.46 0 1 4 4
Mazda RX4 Wag 21.0 6 160.0 110 3.90 2.875 17.02 0 1 4 4
Datsun 710 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1
Hornet 4 Drive 21.4 6 258.0 110 3.08 3.215 19.44 1 0 3 1
Hornet Sportabout 18.7 8 360.0 175 3.15 3.440 17.02 0 0 3 2
Valiant 18.1 6 225.0 105 2.76 3.460 20.22 1 0 3 1
Duster 360 14.3 8 360.0 245 3.21 3.570 15.84 0 0 3 4
Merc 240D 24.4 4 146.7 62 3.69 3.190 20.00 1 0 4 2
Merc 230 22.8 4 140.8 95 3.92 3.150 22.90 1 0 4 2
Merc 280 19.2 6 167.6 123 3.92 3.440 18.30 1 0 4 4
Merc 280C 17.8 6 167.6 123 3.92 3.440 18.90 1 0 4 4
Merc 450SE 16.4 8 275.8 180 3.07 4.070 17.40 0 0 3 3
Merc 450SL 17.3 8 275.8 180 3.07 3.730 17.60 0 0 3 3
Merc 450SLC 15.2 8 275.8 180 3.07 3.780 18.00 0 0 3 3
Cadillac Fleetwood 10.4 8 472.0 205 2.93 5.250 17.98 0 0 3 4
Lincoln Continental 10.4 8 460.0 215 3.00 5.424 17.82 0 0 3 4
Chrysler Imperial 14.7 8 440.0 230 3.23 5.345 17.42 0 0 3 4
Fiat 128 32.4 4 78.7 66 4.08 2.200 19.47 1 1 4 1
Honda Civic 30.4 4 75.7 52 4.93 1.615 18.52 1 1 4 2
Toyota Corolla 33.9 4 71.1 65 4.22 1.835 19.90 1 1 4 1
Toyota Corona 21.5 4 120.1 97 3.70 2.465 20.01 1 0 3 1
Dodge Challenger 15.5 8 318.0 150 2.76 3.520 16.87 0 0 3 2
AMC Javelin 15.2 8 304.0 150 3.15 3.435 17.30 0 0 3 2
Camaro Z28 13.3 8 350.0 245 3.73 3.840 15.41 0 0 3 4
Pontiac Firebird 19.2 8 400.0 175 3.08 3.845 17.05 0 0 3 2
Fiat X1-9 27.3 4 79.0 66 4.08 1.935 18.90 1 1 4 1
Porsche 914-2 26.0 4 120.3 91 4.43 2.140 16.70 0 1 5 2
Lotus Europa 30.4 4 95.1 113 3.77 1.513 16.90 1 1 5 2
Ford Pantera L 15.8 8 351.0 264 4.22 3.170 14.50 0 1 5 4
Ferrari Dino 19.7 6 145.0 175 3.62 2.770 15.50 0 1 5 6
Maserati Bora 15.0 8 301.0 335 3.54 3.570 14.60 0 1 5 8
Volvo 142E 21.4 4 121.0 109 4.11 2.780 18.60 1 1 4 2

Agregar argumentos a los Bloques de código (ver Section 2.11)

  • fig.align: Alinear figura. Los valores pueden ser: “default”, “center”, “left”, o “right”?
  • fig.cap: Pie de figura. Por ejemplo “Gráfica muy padre”
  • fig.height y fig.width

Integrar ressultados del código en el reporte

library(tidyverse)
library(palmerpenguins)

#filtrar datos
penguin_filter <- penguins |>
  filter(species == params$species, # param species: Adelie en YAML
    !is.na(body_mass_g))
# datos_originales - datos_filtrados
filas_distintas <- nrow(penguins) - nrow(penguin_filter)

inline code `r `

Tenemos datos de 'r nrow(penguins)' pinguinos. Solo
'r filas_distintas' están catalogados como 'r params$species'. 
  • Tenemos datos de 344 pinguinos. Solo 193 están catalogados como Adelie.

Gráficos Interactivos

Plotly

library(dplyr)
library(plotly)

my_df <- starwars |> filter(mass < 500) 

plot_ly(my_df, x = my_df$height, y = my_df$mass, 
        text = my_df$name, # Ver el nombre
        mode = "markers", color = my_df$gender)

Gráficos 3-D

x <- seq_len(nrow(volcano)) + 100
y <- seq_len(ncol(volcano)) + 500

plot_ly() %>% 
  add_surface(x = ~x, y = ~y, z = ~volcano)

Animaciones

Tablas dinámicas

Aplicaciones con Shiny

La librería Shiny permite crear aplicaciones con R. Quarto puede correr estas aplicaciones en sus documentos o incrustar las aplicaciones por medio de iFrames (“cargar una página dentro de otra página”).

Formatos

format:
  html:
    css: styles.css
    html-math-method: katex

Múltiples formatos en un documento

format:
  html:
    css: styles.css
    html-math-method: katex
  pdf:
    documentclass: report
    margin-left: 30mm
    margin-right: 30mm

html y pdf

A screenshot of a HTML article about Boston Terriers, the document has an image in the right hard margin, a floating table of contents, and different sections split up by headers

HTML

A screenshot of a PDF article about Boston Terriers, the document has an image in the right hard margin, a floating table of contents, and different sections split up by headers

PDF

formatos para artículos

----
title: "A Short Demo Article"
format:
    jss-pdf: default
    jss-html: default
author:
  - name: Achim Zeileis
    affiliations:
      - name: Universität Innsbruck
        department: Department of Statistics
        address: Universitätsstr. 15
        city: Innsbruck
        country: Austria
        postal-code: 6020
      - Journal of Statistical Software
    orcid: 0000-0003-0918-3766
    email: Achim.Zeileis@R-project.org
    url: https://www.zeileis.org/
abstract: |
bibliography: bibliography.bib 
---

Formatos para revistas de Elsevier, PLOS, Nature…

Screenshot of a rendered Quarto document to the Journal of Statistical Science format.

Artículos y reportes

Presentaciones

Páginas web

libros

Otros

Citas

  • Insertar con Insert > Citation.
  • Insertar con DOI, referencia de librería de Zotero, Pubmed ID u obtener referencias de un archivo .bib en el mismo directorio de nuestro documento.
  • Se crea un archivo de tipo .bib donde se añaden las referencias.
  • Al renderizar el ducmento, se ponen las referencias al final del documento.

Latex

Modelos lineales

# Modelado
lm_diamantes <- lm(quilate ~ corte, data = datos_diamantes) 
lmer_diamantes <- lmer(quilate ~ corte + (1 | precio), data = datos_diamantes)

# Extraer ecuaciones
lm_latex <- equatiomatic::extract_eq(lm_diamantes)
lmer_latex <- equatiomatic::extract_eq(lmer_diamantes)

Output

\[ \operatorname{quilate} = \alpha + \beta_{1}(\operatorname{corte}_{\operatorname{.L}}) + \beta_{2}(\operatorname{corte}_{\operatorname{.Q}}) + \beta_{3}(\operatorname{corte}_{\operatorname{.C}}) + \beta_{4}(\operatorname{corte}_{\operatorname{\texttt{^}4}}) + \epsilon \]

\[ \begin{aligned} \operatorname{quilate}_{i} &\sim N \left(\mu, \sigma^2 \right) \\ \mu &=\alpha_{j[i]} + \beta_{1}(\operatorname{corte}_{\operatorname{.L}}) + \beta_{2}(\operatorname{corte}_{\operatorname{.Q}}) + \beta_{3}(\operatorname{corte}_{\operatorname{.C}}) + \beta_{4}(\operatorname{corte}_{\operatorname{\texttt{^}4}}) \\ \alpha_{j} &\sim N \left(\mu_{\alpha_{j}}, \sigma^2_{\alpha_{j}} \right) \text{, for precio j = 1,} \dots \text{,J} \end{aligned} \]

iframes